#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define k 3
int str2float(char ch[],float * final)
{
	
	int i;
	for(i=0;ch[i];i++)
	{
		if(!((ch[i]>='0'&&ch[i]<='9')||ch[i]=='.'))
			return 0;
	}
	sscanf(ch,"%f",final);
	return 1;
}
int GetMMA(float in[],float *max,float *min,float *ave)
{
	*min = *max = in[0];
	*ave = 0;
	int i=1;
	for(i=0;in[i]>=0;i++)
	{
		*ave += in[i];
		if(in[i] < *min)
			*min=in[i];
		else if(in[i] > *max)
			*max=in[i];
	}
	*ave /= i;
	return 1;
}
int file2float(float in[],char cmd[])
{
	int i=1,j,l=0;
	char c,c1,ch[20];
	FILE *fp;
	fp = popen(cmd,"r");
	c=getc(fp);
	do{
		i=1;
		strcpy(ch,"");		
		while(c!='\n' && c!=EOF)
		{
			c1=c;
			c=getc(fp);
			c!=' ' && c1==' ' && i++;
			if(i==k && c1!=' ')
			{
				for(j=0;ch[j]!='\0';j++);
				ch[j]=c1;
				ch[j+1]='\0';
			}
		}
		if(c!=EOF&&str2float(ch,&in[l]))
		{
			l++;
		}
		c=getc(fp);
	}while(c!=EOF);
	in[l]=-1;
	pclose(fp);
	return 0;
}

int main()
{
	char cmd[30]="ps aux";
	float cpu[500],max,min,ave;
	int i=1;
	while(1)
	{
		//system("clear");
		file2float(cpu,cmd);
		GetMMA(cpu,&max,&min,&ave);
		printf("Max:%g\nMin:%g\nAve:%g\n",max,min,ave);
		sleep(i);
	}
	return 0;
}
